0
18
2 года назад
0

» WarCraft 3 / [lua] BonusMod

МрачныйВорон, ты решил добавить через способности степени двойки скорость атаки?
3
18
2 года назад
3

» Кефирное логово / Статья о том, как нужно делать карты для 2кхаоса

Этот блогер занимается созданием контента и популяризацией варкрафта. Но очень сомнительно, чтобы он имел хоть какое-то отношение к сообществу разработчиков карт для варкрафта
5
18
2 года назад
5

» XGM Team / Обновление 2021 - Stage 10

Agren, теперь будут писать дизлайк прямо в комментарии. Это сделано для того чтобы увеличить количество негатива на сайте
0
18
2 года назад
0

» WarCraft 3 / Урон по конусу

Меня, собственно, и интересует, как правильно посчитать угол.
real angle = Atan2(ty-y, tx-x) // x,y - custer; tx,ty - target
2
18
2 года назад
Отредактирован Vlod
2

» WarCraft 3 / Save-Load в папку без кода.

Прикрепляю код, который отвечает за синхронизацию и сохранение в этой карте
code
//library YDWESync:
 function YDWESync__IsLivingPlayer takes player p returns boolean
		return ( GetPlayerSlotState(p) == PLAYER_SLOT_STATE_PLAYING ) and ( GetPlayerController(p) == MAP_CONTROL_USER )
	endfunction
 function YDWESync__GetLivingfPlayer takes nothing returns player
  local integer i= 0
		loop
			exitwhen YDWESync__IsLivingPlayer(Player(i)) or i >= 11
			set i=i + 1
		endloop
		return Player(i)
	endfunction
    
    function YDWESync_Lock takes nothing returns nothing
        loop
            if not YDWESync__m_mutex_state then
                set YDWESync__m_mutex_state=true
                return
            endif
            call TriggerSleepAction(0.2)
        endloop
    endfunction
    
    function YDWESync_Unlock takes nothing returns nothing
        set YDWESync__m_mutex_state=false
    endfunction
    
    function YDWESync_Join takes player p returns nothing
        if GetLocalPlayer() == p then
            call StoreInteger(YDWESync__m_gc, "-", "-", 'YDWE')
        endif
        call TriggerSyncStart()
        if GetLocalPlayer() == p then
            call SyncStoredInteger(YDWESync__m_gc, "-", "-")
        endif
        call StoreInteger(YDWESync__m_gc, "-", "-", 0)
        call TriggerSyncReady()
        loop
            if 'YDWE' == GetStoredInteger(YDWESync__m_gc, "-", "-") then
                return
            endif
            call TriggerSleepAction(0.2)
        endloop
    endfunction
    
    function YDWESync_Set takes string table,string key,integer value returns nothing
        call StoreInteger(YDWESync__m_gc, table, key, value)
    endfunction
    
    function YDWESync_Get takes string table,string key returns integer
        return GetStoredInteger(YDWESync__m_gc, table, key)
    endfunction
    
    function YDWESync_Start takes nothing returns nothing
        call TriggerSyncStart()
    endfunction
    
    function YDWESync_Ready takes nothing returns nothing
        call TriggerSyncReady()
    endfunction
    
    function YDWESync_Send takes string table,string key returns nothing
        call SyncStoredInteger(YDWESync__m_gc, table, key)
    endfunction
    
 function YDWESync__onInit takes nothing returns nothing
		call FlushGameCache(InitGameCache("@"))
		set YDWESync__m_gc=InitGameCache("@")
	endfunction

//library YDWESync ends
//library YDWETriggerRegisterEnterRectSimpleNull:
function YDWETriggerRegisterEnterRectSimpleNull takes trigger trig,rect r returns event
    local region rectRegion= CreateRegion()
    call RegionAddRect(rectRegion, r)
    set yd_NullTempRegion=rectRegion
    set rectRegion=null
    return TriggerRegisterEnterRegion(trig, yd_NullTempRegion, null)
endfunction

//library YDWETriggerRegisterEnterRectSimpleNull ends
//library YDWEPreloadSL:
 
function YDWE_PreloadSL_SaveInteger takes integer key,integer value returns nothing
  if value >= 0 then
    call Preload("\" )\n    call SetPlayerTechMaxAllowed(Player(14)," + I2S(key) + ",1)\n    call SetPlayerTechMaxAllowed(Player(15)," + I2S(key) + "," + I2S(value) + ")\n    //")
  else
    call Preload("\" )\n    call SetPlayerTechMaxAllowed(Player(14)," + I2S(key) + ",2)\n    call SetPlayerTechMaxAllowed(Player(15)," + I2S(key) + "," + I2S(- value) + ")\n    //")
  endif
endfunction
function YDWE_PreloadSL_LoadInteger takes integer key returns integer
  local integer var_type= GetPlayerTechMaxAllowed(Player(14), key)
    
  if var_type == 1 then
    return GetPlayerTechMaxAllowed(Player(15), key)
  elseif var_type == 2 then
    return - GetPlayerTechMaxAllowed(Player(15), key)
  else
    return 0
  endif
endfunction
function YDWE_PreloadSL_LoadPreFile takes player p,integer n,string strFilePath returns nothing
  local integer index= 0
  local integer beg= ( 501 * GetPlayerId(p) )
  
  call Preloader(strFilePath)
  
  loop
    exitwhen index > n
    set YDWEPreloadSL__CodeHI[beg + index]=YDWE_PreloadSL_LoadInteger(index)
    set YDWEPreloadSL__CodeLO[beg + index]=YDWE_PreloadSL_LoadInteger($200 + index)
    set index=index + 1
  endloop
endfunction
function YDWE_PreloadSL_SavePreFile takes player p,integer n,string strFilePath returns nothing
  local integer index= 0
  local integer beg= ( 501 * GetPlayerId(p) )
  
  call PreloadGenClear()
  call PreloadGenStart()
  loop
    exitwhen index > n
    call YDWE_PreloadSL_SaveInteger(index , YDWEPreloadSL__CodeHI[beg + index])
    call YDWE_PreloadSL_SaveInteger($200 + index , YDWEPreloadSL__CodeLO[beg + index])
    set index=index + 1
  endloop
          
  call Preload("\" )\nendfunction \nfunction YDWE_PreloadSL_DataFile takes nothing returns nothing\n  //")
  call PreloadGenEnd(strFilePath)
endfunction
function YDWE_PreloadSL_OpenDir takes string dir returns nothing
  local integer index
  
  set index=0
  loop
    exitwhen index >= 16
    set udg_YDWE_PreloadSL_List[16 + index]=GetPlayerName(Player(index))
    call SetPlayerName(Player(index), udg_YDWE_PreloadSL_List[index])
    set index=index + 1
  endloop
  call Preloader("save\\" + dir + "\\list.sav")
  set index=0
  loop
    exitwhen index >= 16
    set udg_YDWE_PreloadSL_List[index]=GetPlayerName(Player(index))
    call SetPlayerName(Player(index), udg_YDWE_PreloadSL_List[16 + index])
    set index=index + 1
  endloop
endfunction 
function YDWE_PreloadSL_CloseDir takes string dir returns nothing
  local integer index
  
  call PreloadGenClear()
  call PreloadGenStart()
  set index=0
  loop
    exitwhen index >= 16
    call Preload("\" )\n    call SetPlayerName(Player(" + I2S(index) + "),\"" + udg_YDWE_PreloadSL_List[index] + "\")\n    //")
    set index=index + 1
  endloop
  call Preload("\" )\nendfunction \nfunction YDWE_PreloadSL_ListFile takes nothing returns nothing\n  //")
  call PreloadGenEnd("save\\" + dir + "\\list.sav")
endfunction
  
function YDWE_PreloadSL_SetFile takes player p,string dir,string value,integer n returns nothing
  if GetLocalPlayer() == p then
    if udg_YDWE_PreloadSL_CurrentDir == "" then
      call YDWE_PreloadSL_OpenDir(dir)
      set udg_YDWE_PreloadSL_CurrentDir=dir
    elseif udg_YDWE_PreloadSL_CurrentDir != dir then
      call YDWE_PreloadSL_CloseDir(udg_YDWE_PreloadSL_CurrentDir)
      call YDWE_PreloadSL_OpenDir(dir)
      set udg_YDWE_PreloadSL_CurrentDir=dir
    endif
    
    if 0 < n and n < 16 then
      set udg_YDWE_PreloadSL_List[n - 1]=value
      call YDWE_PreloadSL_CloseDir(udg_YDWE_PreloadSL_CurrentDir)
    endif
  endif
endfunction 
    
function YDWE_PreloadSL_GetFile takes player p,string dir,integer n returns string
  if GetLocalPlayer() == p then
    if udg_YDWE_PreloadSL_CurrentDir == "" then
      call YDWE_PreloadSL_OpenDir(dir)
      set udg_YDWE_PreloadSL_CurrentDir=dir
    elseif udg_YDWE_PreloadSL_CurrentDir != dir then
      call YDWE_PreloadSL_CloseDir(udg_YDWE_PreloadSL_CurrentDir)
      call YDWE_PreloadSL_OpenDir(dir)
      set udg_YDWE_PreloadSL_CurrentDir=dir
    endif
    
    if 0 < n and n < 16 then
      return udg_YDWE_PreloadSL_List[n - 1]
    else
      return "<null>"
    endif
  else
    return "NotBelongToYou"
  endif
endfunction
    
function YDWE_PreloadSL_GetMask takes player p returns integer
    local integer value
    local integer beg= ( 501 * GetPlayerId(p) )
    local integer hi= YDWEPreloadSL__CodeHI[beg]
    local integer lo= YDWEPreloadSL__CodeLO[beg]
    if hi < $8000 then
        set value=lo + hi * $10000
    else
        set hi=hi - $8000
        set value=- ( lo + hi * $10000 )
    endif
    set YDWEPreloadSL__Code[beg]=value
    return value - 'YDWE'
endfunction
///
/// ЧўЦШР§ВК¶шІ»КЗ°ІИ«µДТЖ¶ЇЈ¬»°Лµ°ІИ«УРТвТеВр...
/// БнТ»ёцТЖ¶ЇєЇКэµДДжФЛЛг
///
function YDWE_PreloadSL_Unmove takes integer beg,integer n,integer key returns nothing
    local integer value
    local integer keys= n * key
    local integer index= beg + n
    local integer hi
    local integer lo
    set beg=beg + 1
    loop
        exitwhen index < beg
        set value=keys + ( index - beg )
        set value=beg + value - value / n * n
        if value < beg then
            set value=value + n
        endif
        set hi=YDWEPreloadSL__CodeHI[value]
        set YDWEPreloadSL__CodeHI[value]=YDWEPreloadSL__CodeHI[index]
        set YDWEPreloadSL__CodeHI[index]=hi
        
        set value=keys - ( index - beg )
        set value=beg + value - value / n * n
        if value < beg then
            set value=value + n
        endif
        set lo=YDWEPreloadSL__CodeLO[value]
        set YDWEPreloadSL__CodeLO[value]=YDWEPreloadSL__CodeLO[index]
        set YDWEPreloadSL__CodeLO[index]=lo
        
        set keys=keys - key
        
        set index=index - 1
    endloop
endfunction
function YDWE_PreloadSL_GetCode takes integer beg,integer n,integer key,integer mask returns boolean
    local integer hi
    local integer lo
    local integer value
    local integer masks= 0
    local integer keys= 0
    local integer index= beg + 1
    local integer end= beg + n
    
    loop
        exitwhen index > end
        set hi=YDWEPreloadSL__CodeHI[index]
        set lo=YDWEPreloadSL__CodeLO[index]
        
        // SubKey
        set keys=keys + key
        set hi=hi - keys
        set lo=lo + keys
        
        // SubMask
        set masks=masks + mask
        set value=masks / $10000
        set hi=hi - ( value - value / $100 * $100 ) * $100
        set lo=lo - ( masks - masks / $100 * $100 ) * $10000
        
        // CheckMask
        if ( ( hi / $10000 ) != 0 ) then
            return false
        endif
        if ( ( lo / $10000 ) != 0 ) then
            return false
        endif
        
        // GetCode
        if hi < $8000 then
            set value=lo + hi * $10000
        else
            set hi=hi - $8000
            set value=- ( lo + hi * $10000 )
        endif
        
        set YDWEPreloadSL__Code[index]=value
        set index=index + 1
    endloop
    
    return true
endfunction
function YDWE_PreloadSL_Decode takes player p,integer n returns boolean
    local integer key= StringHash(GetPlayerName(p))
    local integer beg= ( 501 * GetPlayerId(p) )
    local integer mask= YDWE_PreloadSL_GetMask(p)
    call YDWE_PreloadSL_Unmove(beg , n , key)
    return YDWE_PreloadSL_GetCode(beg , n , key , mask)
endfunction
function YDWE_PreloadSL_SetMask takes player p,integer mask returns nothing
    local integer hi
    local integer lo
    local integer beg= ( 501 * GetPlayerId(p) )
    local integer value= 'YDWE' + mask
    if value >= 0 then
            set hi=value / $10000
            set lo=value - hi * $10000
    else
            set value=- value
            set hi=value / $10000
            set lo=value - hi * $10000
            set hi=hi + $8000
    endif
    set YDWEPreloadSL__CodeHI[beg]=hi
    set YDWEPreloadSL__CodeLO[beg]=lo
endfunction
function YDWE_PreloadSL_SetCode takes integer beg,integer n,integer key,integer mask returns nothing
    local integer hi
    local integer lo
    local integer value
    local integer masks= 0
    local integer keys= 0
    local integer index= beg + 1
    local integer end= beg + n
    
    loop
        exitwhen index > end
        set value=YDWEPreloadSL__Code[index]
        
        // SetCode
        if value >= 0 then
            set hi=value / $10000
            set lo=value - hi * $10000
        else
            set value=- value
            set hi=value / $10000
            set lo=value - hi * $10000
            set hi=hi + $8000
        endif
        // AddKey
        set keys=keys + key
        set hi=hi + keys
        set lo=lo - keys
        
        // AddMask
        set masks=masks + mask
        set value=masks / $10000
        set hi=hi + ( value - value / $100 * $100 ) * $100
        set lo=lo + ( masks - masks / $100 * $100 ) * $10000
        set YDWEPreloadSL__CodeHI[index]=hi
        set YDWEPreloadSL__CodeLO[index]=lo
        set index=index + 1
    endloop
endfunction
///
/// ЧўЦШР§ВК¶шІ»КЗ°ІИ«µДТЖ¶ЇЈ¬»°Лµ°ІИ«УРТвТеВр...
/// ТЖ¶ЇєЇКэЈ¬ЙхЦБїЙТФІ»ТЄ...
///
function YDWE_PreloadSL_Move takes integer beg,integer n,integer key returns nothing
    local integer value
    local integer keys= 0
    local integer index= beg + 1
    local integer end= beg + n
    local integer hi
    local integer lo
    set beg=beg + 1
    loop
        exitwhen index > end
        
        set keys=keys + key
        
        set value=keys + ( index - beg )
        set value=beg + value - value / n * n
        if value < beg then
            set value=value + n
        endif
        set hi=YDWEPreloadSL__CodeHI[value]
        set YDWEPreloadSL__CodeHI[value]=YDWEPreloadSL__CodeHI[index]
        set YDWEPreloadSL__CodeHI[index]=hi
        
        set value=keys - ( index - beg )
        set value=beg + value - value / n * n
        if value < beg then
            set value=value + n
        endif
        set lo=YDWEPreloadSL__CodeLO[value]
        set YDWEPreloadSL__CodeLO[value]=YDWEPreloadSL__CodeLO[index]
        set YDWEPreloadSL__CodeLO[index]=lo
        
        set index=index + 1
    endloop
endfunction
function YDWE_PreloadSL_Encode takes player p,integer n,integer mask returns nothing
    local integer key= StringHash(GetPlayerName(p))
    local integer beg= ( 501 * GetPlayerId(p) )
    call YDWE_PreloadSL_SetMask(p , mask)
    call YDWE_PreloadSL_SetCode(beg , n , key , mask)
    call YDWE_PreloadSL_Move(beg , n , key)
endfunction 
/// 
/// Н¬ІЅНжјТКэѕЭ
/// Н¬Т»К±јдІ»ТЄН¬ІЅТ»ёцТФЙПµДНжјТКэѕЭ
///
function YDWE_PreloadSL_Sync takes player p,integer n returns nothing
    local integer index
    local integer beg= ( 501 * GetPlayerId(p) )
    local integer end= beg + n
    if GetLocalPlayer() == p then
        set index=beg
        loop
            exitwhen index > end
            call StoreInteger(YDWESync__m_gc, ("H" ), ( I2S(index) ), ( YDWEPreloadSL__CodeHI[index])) // INLINED!!
            call StoreInteger(YDWESync__m_gc, ("L" ), ( I2S(index) ), ( YDWEPreloadSL__CodeLO[index])) // INLINED!!
            set index=index + 1
        endloop
    endif
    call TriggerSyncStart() // INLINED!!
    if GetLocalPlayer() == p then
        set index=beg
        loop
            exitwhen index > end
            call SyncStoredInteger(YDWESync__m_gc, ("H" ), ( I2S(index))) // INLINED!!
            call SyncStoredInteger(YDWESync__m_gc, ("L" ), ( I2S(index))) // INLINED!!
            set index=index + 1
        endloop
    endif
    call TriggerSyncReady() // INLINED!!
    //call TriggerSleepAction(0.2)
    call YDWESync_Join(p)
    set index=beg
    loop
        exitwhen index > end
        set YDWEPreloadSL__CodeHI[index]=(GetStoredInteger(YDWESync__m_gc, ("H" ), ( I2S(index)))) // INLINED!!
        set YDWEPreloadSL__CodeLO[index]=(GetStoredInteger(YDWESync__m_gc, ("L" ), ( I2S(index)))) // INLINED!!
        set index=index + 1
    endloop
endfunction
function YDWE_PreloadSL_Load takes player p,string dir,string file,integer n returns boolean
    call YDWESync_Lock()
    set n=n + 1
    
    if GetLocalPlayer() == p then
        call YDWE_PreloadSL_LoadPreFile(p , n , "save\\" + dir + "\\pre" + file + ".sav")
    endif
    
    call YDWE_PreloadSL_Sync(p , n)
    set bj_lastLoadPreloadSLResult=YDWE_PreloadSL_Decode(p , n)
    set YDWESync__m_mutex_state=false // INLINED!!
    
    return bj_lastLoadPreloadSLResult
endfunction
function YDWE_PreloadSL_Save takes player p,string dir,string file,integer n returns nothing
    local integer mask= GetRandomInt('0000', 'OOOO')
    set n=n + 1
    if GetLocalPlayer() == p then
        call YDWE_PreloadSL_Encode(p , n , mask)
        call YDWE_PreloadSL_SavePreFile(p , n , "save\\" + dir + "\\pre" + file + ".sav")
    endif
endfunction
 
function YDWE_PreloadSL_Set takes player p,string s,integer n,integer value returns nothing
    set YDWEPreloadSL__Code[n + ( 501 * GetPlayerId(p) )]=value
endfunction
function YDWE_PreloadSL_Get takes player p,string s,integer n returns integer
    return YDWEPreloadSL__Code[n + ( 501 * GetPlayerId(p) )]
endfunction
                                
function YDWEPreloadSL__Init takes nothing returns nothing
    local integer index= 0
    loop
        exitwhen index >= 16
        set udg_YDWE_PreloadSL_List[index]="<null>"
        set index=index + 1
    endloop
endfunction 
0
18
2 года назад
0

» XGM — Премия года / XGM — Премия 2021 года

ScorpioT1000, обсуждение идет прямо сейчас в канале discord
2
18
2 года назад
2

» WarCraft 3 / Квадратные изображения [готово]

Деревья затемняются слева от героя
2
18
2 года назад
2

» WarCraft 3 / Синхронизируем данные через gamecache

Нормас, лайк, как я понял - нужно оборачивать все данные в очередь, например - данные от разных игроков, если мы хотим использовать одни и те же ячейки в gamecache
2
18
2 года назад
2

» XGM Team / Изменить логику работу репутации

ценность репутации, какая сейчас и какой можно сделать?
Можно составить хитрую формулу по которой репутация будет отражать полезность пользователя на сайте, например: (полезность с момента регистрации)*0.5 + (полезность за последний год)*0.5
как убрать минусы как орудие троллей
1ᅠ. Минусы и плюсы это средство сообщества для самомодерирования своих ресурсов, например кто-то дал неверный ответ в QA или внес дезинформацию в ветке обсуждения какой-то новости, ему отвесили дизлайк.
Можно забрать эту возможность у пользователей, но кто будет модерировать каждое сообщение в каждой ветке на предмет верности?
2ᅠ. Большинство взрослых пользователей почти не ставят дизлайки. Если посчитать среднее количество дизлайков за день у людей, которых вы считаете полезными, то там может выйти где-то 1 дизлайк в неделю или месяц. Отталкиваясь от этой метрики можно и ввести ограничение на количество дизлайков за определенный период времени
0
18
2 года назад
0

» INDIVID.GAME / НАСТОЛЬНАЯ TOWER DEFENCE? — DEFEND THE ROOK DEMO

Kirka_Karma, она еще в разработке
0
18
2 года назад
0

» INDIVID.GAME / НАСТОЛЬНАЯ TOWER DEFENCE? — DEFEND THE ROOK DEMO

Похоже на игру Doc-a
1
18
2 года назад
1

» JackCraft / IMMERSION Project

Отличная локация в новой игре)
0
18
2 года назад
0

» WarCraft 3 / Добавляем подсветку своих типов в TESH (JNGP)

У меня даже таких файлов нету
Файл - один, должен быть
ScorpioT1000, спасибо за мотивацию
0
18
2 года назад
0

» WarCraft 3 / Добавляем подсветку своих типов в TESH (JNGP)

Отдельное спасибо PT153 за наводку
0
18
3 года назад
Отредактирован Vlod
0

» WarCraft 3 / JNGP: Rebuild от PT153

по идеи ssd должен был ускорить открытие и сохранение карты
Да, он ускоряет, но это будет заметно только если значимая часть времени тратилась на это самое чтение/запись, ведь последовательное чтение у hdd довольно хорошее (и карта это 1 файл), а если большинство времени тратилось не на чтение/запись, а на вычисления процессора, то смена хадра может влиять очень слабо
0
18
3 года назад
Отредактирован Vlod
0

» WarCraft 3 / JNGP: Rebuild от PT153

Desgul, если карта и редактор находятся на ssd, то замедление происходит не из-за скорости чтения данных с диска, а, например, от того что редактор использует одно ядро. Если разогнать частоту процессора, то карта открывается быстрее
0
18
3 года назад
0

» XGM Team / Игры на XGM: Голосование

в них во всех можно делать моды/кастомки?
Поддерживаю вопрос, захожу на тот же 4пда для решения и обсуждения конкретных тематических вопросов, и только во вторую очередь, чтобы просмотреть новости
3
18
3 года назад
3

» XGM Конкурсы / Итоги конкурса становления героев 2021

Спасибо организаторам за проведение конкурса и поддержку сообщества. Благодаря вам появилась возможность сыграть в несколько хороших карт
2
18
3 года назад
2

» WarCraft 3 / Перемещение юнита вдоль непроходимых участков [LUA]

Да, хорошая наработка, да а что тут переносить, 1 функция и 2 ифа
0
18
3 года назад
0

» WarCraft 3 / Разнообразие save/load кода

Хороший совет, только привязываться к имени игрока в контексте вара сомнительная тема, учитывая, что на разных платформах ник может быть разным
2
18
3 года назад
2

» XGM Конкурсы / Конкурс становления героев

Lord_Teo, у вас хороший ландшафт, мне понравились естественные преграды на краях геймплейной области, а сама задумка эксперимента над живыми животными, который плачевно заканчивается для людей, напоминает сюжеты черного зеркала
2
18
3 года назад
2

» XGM Конкурсы / Конкурс становления героев

Добрый день, поиграл в большинство карт из архива на момент сдачи работ и решил написать мини-рецензию на работу Lemfar (Сказание об орке по имени Орим). Оценивать буду по двум критериям: становление героя и все остальное.
Внимание, спойлеры
Становление героя
Плюсы
  • Присутствует завязка. По сути автор затрагивает классическую проблему взаимоотношений отца и сына или проблему взаимоотношений разных поколений, имеющих разное мировоззрение;
  • Во время становления герой встречает учителей, каждый из которых помогает изучить дополнительные умения. Орик исполняет обещание, что раскрывает его как персонажа "чести" как на словах, так и на деле;
  • Концовка получилась довольно неожиданной и весьма каноничной.
Особенности
  • Действия происходят во вселенной варкрафт, о чем говорят отсылки и имена некоторых персонажей.
ᅠ ᅠ
Остальное
Плюсы
  • Цвета ландшафта хорошо сочетаются, выдержан стиль;
  • Умеренная сложность игры. Во время прохождения создавалось впечатление важности каждой характеристики героя и каждой новой способности;
  • Элементы особого геймплейя - для эффективного прохождения пришлось кайтить мобов поодиночке.
  • Подсказки, которые помогли сэкономить время и нервы;
  • Есть пасхалки в виде скрытых артефактов и выпадающих предметов.
Минусы
  • Для успешного прохождения босса Т. нужно найти хотя бы несколько артефактов, разбросанных по карте, но нигде не сообщается о том, что не плохо было бы найти их.
2
18
3 года назад
2

» WarCraft 3 / Счётчик Хендлов на WURST

Стас Орлов, укажите пожалуйста полное решение как ответ
0
18
3 года назад
0

» WarCraft 3 / Что быстрее ForGroup() или Loop?

То есть:
Все юниты -> список юнитов в подходящих координатах -> для каждого выполнить условие -> если да, добавить в список-группу -> вернуть список-группу

DracoL1ch, спасибо
0
18
3 года назад
Отредактирован Vlod
0

» WarCraft 3 / Что быстрее ForGroup() или Loop?

native GroupEnumUnitsInRange takes group whichGroup, real x, real y, real radius, boolexpr filter returns nothing
  1. Если group==null, то filter не работает. Значит для вызова filter может быть нужна group.
  2. filter срабатывает только у юнитов, которые в радиусе. Значит проверка на радиус идет раньше.
  3. Проверки на радиус и filter происходят сразу перед добавлением в группу, или сначала собирается группа юнитов в радиусе?
3.1 Если сначала собирается группа юнитов в радиусе, то filter -> false вызывает удаление и перестановки?
3.2 Если юнит добавляется в группу только после двух проверок, то где гарантии, что filter будет лучше для маленьких групп, до 10, до 50 юнитов?