28

» WarCraft 3 / wait течет или капает?

Мне уже лет 5 твердят,что команда "wait" утечна.
PolledWait не обнуляет переменную таймера, вот и всё. Это не утечка, но хендл не освобождается.
28

» WarCraft 3 / Запретить автоатаку

Сама по себе она нейтральная и никого не атакует.
Можно отключать ей атаку, а когда герой садится, включать.
28

» WarCraft 3 / JNGP 1.30 - есть что-нибудь такое?

Это нужно помнить на память все.
Так-то N++ выдаёт подсказки по функциям, но я не ручаючь за эту подсветку.
28

» WarCraft 3 / Ошибка при выборе юнита в триггере

Принятый ответ
Нужно в GUI в каком-нибудь действии юнита этого выбрать, тогда данная переменная создастся.
28

» WarCraft 3 / JNGP 1.30 - есть что-нибудь такое?

Можно писать код в Notepad++ с подсветкой (тоже на хайве есть), а код компилировать в jasshelper через powershell.
28

» WarCraft 3 / Последовательность выполнения

Попробуй отдавать "стоп" перед удалением, например,
Я так и начал делать, но сейчас это бесполезно, мне кажется, потому что сейчас рект из региона удаляется первее юнитов.
PT153:
На данный момент последовательность такая: жизни становятся равным нулю; установка inGame на false; удаление области из региона, на который зарегистрирован триггер EnterFinish; всем юнитам отдаётся приказ "Стоп"; удаление миньонов.
Раз уж никто точно не знает, то хватит ли реализации из первого комментария, чтобы избежать данной ошибки?
Вообще, надо систему логов сделать, вместо вывода в сообщений в игру, ибо последние отключены в ndopt версиях.
28

» WarCraft 3 / Последовательность выполнения

без карты реплей не могу посмотреть
Забыл, xD.
Путь у карты такой: Maps\Download\WispTD v3.-1.2 ndopt.w3x
Обязательно замени _ на пробелы в названии карты.
Загруженные файлы
28

» WarCraft 3 / Приоритет атаки ИИ

Я ролик по карте смотрел, там у юнита не было атаки, но у него была способность феникса, на не не обращали внимание.
28

» WarCraft 3 / Приоритет атаки ИИ

не надо атаки, попробуй сделать ему периодическое нанесение урона каждую секунду противникам вокруг в размере 0.01
Это не поможет, разве что только если через функции наносить урон.
28

» WarCraft 3 / Последовательность выполнения

Но это не так: если несколько миньонов заходят в область почти одновременно, триггер вызывается несколько раз, потому что код не успевает удалять миньонов, которые почти одновременно входят. Потому данный код багнут.
Удаление игрока вызывается несколько раз.

19:28, жёлтый проигрывает, удаляясь 3 раза, из-за чего у зелёного становится -1 потребление пищи, а 2 игрока вылетают из пула играющих.
В момент удаления у оранжевого создаются эффекты (у него точка (0, 0)), так как эффекты создаются для юнитов, что уже удалены.
Загруженные файлы
28

» WarCraft 3 / Последовательность выполнения

(в начале функции пишем название функции или триггера, в конец функции пишем end_name func и будет понятно кто за кем следует)
Да вот и проблема в том, что это происходит нечасто, но происходит, это сложно просимулировать.
28

» WarCraft 3 / Последовательность выполнения

На данный момент я попытался исправить это так. Все функции не менялись, кроме указанных ниже:
раскрыть
function Trig_EnterFinish_Actions takes nothing returns nothing
    local Minion m = GetUnitUserData(GetEnteringUnit())
    local CustomPlayer p = m.foe
    if p.inGame then
        call p.leaked(m.data.livesconsume)
        call m.gainBounty(false)
        if p != m.owner and m.owner.inGame then
            call m.owner.leaked(m.data.livesgain)
        endif
        call CreateEffectPoint(EffectLifeConsume, GetUnitX(m.minion), GetUnitY(m.minion))
        if p.lives > 0 then
            call m.remove()
        elseif p.flush() then
            call Message(MessagesDuration, "Player " + p.colored_name + " has been defeated.")
            if bj_isSinglePlayer != (PlayingPlayers.top == 0) then
                call FinishGame(10)
            endif
        endif
    endif
endfunction

// p.flush()
    method flush takes nothing returns boolean
        if inGame then
            set inGame = false
            call field.flush()
            call field.stopAllUnits()
            call PlayingPlayers.deleteFromArray(this)
            set flushing = this
            call ExecuteFunc("SellAllForces")
            call ExecuteFunc("RemoveAllSpawned")
            call ExecuteFunc("RemoveAllMinions")
            call ExecuteFunc("RemoveAllCorpses")
            call ExecuteFunc("SellAllTowers")  // Почти тоже самое, что и call ExecuteFunc("RemoveAllTowers").
            call DeleteTimer()
            if isReady then
                call DestroyGrid.execute()
                call ShadowMultiboard()
                call RemoveUnit(builder)
                set builder = null
                call RemoveUnit(barracks)
                set barracks = null
                call RemoveUnit(altar)
                set altar = null
                call RemoveUnit(merccamp)
                set merccamp = null
                call RemoveUnit(blacksmith)
                set blacksmith = null
                set blacksmith_swap_faction = null
                set blacksmith_mhu_level = null
                set blacksmith_mhu_cost = null
            endif
            call DebugMsg("Player " + I2S(this) + " is flushed.")
            return true
        endif
        return false
    endmethod

// call field.flush()
    method flush takes nothing returns nothing
        // Regions
        call RegionClearRect(SpawnRegion, spawnarea)
        call RegionClearRect(LeaveRegion, leavearea)
        // Destroy
        call TimerStart(t, FieldDestroyDelay, false, DestroyCallback)
    endmethod

// call field.stopAllUnits()
    private static method StopAllUnitsFilterFunc takes nothing returns nothing
        call IssueImmediateOrderById(GetFilterUnit(), Order_stop)
    endmethod
    
    private static boolexpr StopAllUnitsFilter
    
    method stopAllUnits takes nothing returns nothing
        call GroupEnumUnitsInRect(bj_lastCreatedGroup, playerfield, StopAllUnitsFilter)
    endmethod
Достаточно ли этого, чтобы избежать бага, что описан в вопросе? Будет ли лучше поставить в Trig_EnterFinish_Actions вместо if p.inGame then вот это if p.lives > 0 then, или без разницы с реализацией выше? Количество жизней становится меньше 0 раньше, чем флаг inGame становится false.

На данный момент последовательность такая: жизни становятся равным нулю; установка inGame на false; удаление области из региона, на который зарегистрирован триггер EnterFinish; всем юнитам отдаётся приказ "Стоп"; удаление миньонов.
28

» WarCraft 3 / АвтоклиКАБЕЛЬность

Забавный факт - в триггере с событием "Игрок снимает выделение" юнит, с которого было снято выделение, всё ещё считается выделенным.
28

» WarCraft 3 / PauseUnit

Я вместо паузы приказ "Стоп" решил отдавать, просто интересно, в чём же дело.
28

» WarCraft 3 / PauseUnit

так че-то пространственно туманно
Да вообще дичь.
Просимулировал такую же ситуацию на чистой карте - проблемы нет.
Карту в ЛС отправлю.
28

» WarCraft 3 / Реплей

реплей пишется на машине хоста
Это так, даже если хостит бот?
28

» WarCraft 3 / Реплей

По идее да,
Там в этом и вопрос. У меня отображаются только локальные действия игрока 0, но реплей мой, и я не был игроком 0.
28

» WarCraft 3 / jass в новой версии варкрафта

Так в 1.30 ввели поддержку vJass, вот и всё. Вех остальных фич из JNGP там нет.
28

» WarCraft 3 / Как изменить цвет лечения от источника жизни?

Принятый ответ
в РО не указан бафф этой способности
Так у самой способности есть эффект, вот его и надо менять.
28

» WarCraft 3 / Проблема не знаю с чем

кстати а что за скрипт? что в нем?
Код карты. Все триггеры на GUI конвертируются в JASS.
15к строк кода, капец, даже в моей карте 9к строк vJass.

Еще вопрос.. условно 1 триггер занимает 1 поток.. а если в один триггер добавить 3 условия.. то триггер будет занимать как один поток или как 3 ?
Не совсем так.
При срабатывании события создаётся "поток" для функции, где находятся все условия триггера. Если все условия выполнены, то создаётся "поток" для функции, где находятся все действия. Про лимит потока тебе уже сказали выше.
Ещё поток обрывается, если делаешь какую-то дичь, вроде деления на 9 или взятие значения переменной, у которой этого значения нет.
28

» WarCraft 3 / Доспехи веры, зависящие от кол-ва юнитов вокруг ауроносца

не хватает мануала с разбором синтаксиса по джазу
Так синтаксис весьма прост, а всё остальное можно легко узнать, изучив скрипт даже пустой карты вместе с common.j и blizzard.j.
28

» WarCraft 3 / Почему юниты бегут назад в область?

что значит пустой слот?
Bergi_Bear верно ответил, покажу на примере.
    local integer i = 0
    local integer ai = 0
    local player p
    loop
        set p = Player(i)
        if GetPlayerSlotState(p) == PLAYER_SLOT_STATE_PLAYING then
            if GetPlayerController(p) == MAP_CONTROL_USER then
                call CustomPlayer.create.execute(p, i)
            endif
        elseif ai < MaxMinionPlayers then
            set MinionPlayers[ai] = p
            call SetPlayerColor(p, MinionColor)
            call FogModifierStart(CreateFogModifierRect(p, FOG_OF_WAR_VISIBLE, bj_mapInitialPlayableArea, false, true))
            set ai = ai + 1
        endif
        set i = i + 1
        exitwhen i == bj_MAX_PLAYERS
    endloop
28

» WarCraft 3 / Почему юниты бегут назад в область?

Принятый ответ
Если вам нужно, что никто не управлял крипами, то тогда либо даёте их игроку без слота, либо пустому слоту, который был отведён для человека.