Можно ли отключить триггер инициализации для какого-то игрока/игроков не удаляя его?

pavloradko20, не делай этого игрока. Просто поставь юнитов этого игрока на карту, тогда не будут возвращаться на исходную.
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
23
Похожие вопросы:

ответ
Эти названия задаются в файле UI\WorldEditStrings. Достаточно один раз перевести там - и в редакторе это будет работать на всех картах.
прошу не накидываться с агрессией и криками "Лицензию не завезли?"
Лицензию не завезли? Подумай, чисто из уважения к близзам нужно иметь лицензию.
Ниже прикреплён WorldEditStrings из версии 1.26а.
ответ
Лимит операций, обычно это беда настигает заядлых гуишников.
На jass обычно нету таких проблем.
Создайте таймер с периодом .00 сек и запускайте им функции инициализации триггеров.
функция типа InitTrig_Имя триггера - это функция инициализации триггера, она вызывается из функции InitCustomTriggers, но если этих вызовов очень много то функция упирается в лимит операций и поток завершается так и не создав все триггеры.
ответ
в самой последней строке самой последней функции присваивай какое-то значение глобалке и будет тебе счастье знать, что всё закончилось успешно
ответ
эта статья к тебе не относится
она совсем про другое
тебе не нужны ни буферы ни файлы
по поводу 1 и 2 пунктов
а ты попробуй
а потом напиши тут о том что получилось
ответ
Если запускаемая сложность главы отличается от стандартной, то оставить так, как есть, а если нет - то попытаться считать то, что было записано в предыдущей главе (если не записано - сбросить к стандартной).
Вообще, сама функция не запускает уровень с какой-то сложностью. Она просто задает значение глобальной переменной:
Код функции
function SetNextLevelBJ takes string nextLevel returns nothing
    if (nextLevel == "") then
        set bj_changeLevelMapName = null
    else
        set bj_changeLevelMapName = nextLevel
    endif
endfunction
Если копать глубже, то вся проблема здесь:
Код функций
function CustomVictoryOkBJ takes nothing returns nothing
    if bj_isSinglePlayer then
        call PauseGame( false )
        // Bump the difficulty back up to the default.
        call SetGameDifficulty(GetDefaultDifficulty())
    endif

    if (bj_changeLevelMapName == null) then
        call EndGame( bj_changeLevelShowScores )
    else
        call ChangeLevel( bj_changeLevelMapName, bj_changeLevelShowScores )
    endif
endfunction

function CustomVictoryQuitBJ takes nothing returns nothing
    if bj_isSinglePlayer then
        call PauseGame( false )
        // Bump the difficulty back up to the default.
        call SetGameDifficulty(GetDefaultDifficulty())
    endif

    call EndGame( bj_changeLevelShowScores )
endfunction
Если интересно, откуда все это берется, то нужно посмотреть устройство функции CustomVictoryBJ и все вызовы, следующие из нее.
Чтобы править проблему без создания костылей на кэше, то придется переписать близовскую функцию под себя (без сбрасывания сложности), а потом использовать ее вместо оригинальной в своей кампании (удобства ради можно использовать дефайн на cJass).

26
Триггер инициализации содержит кучу действий для каждого игрока в объединённом для всех виде. Если хочешь отключить что-то для кого-то из игроков, то надо всю эту большую систему заново создать. Что конкретно хочешь отключить, может быть там можно как-то попроще сделать?
6
8gabriel8:
Триггер инициализации содержит кучу действий для каждого игрока в объединённом для всех виде. Если хочешь отключить что-то для кого-то из игроков, то надо всю эту большую систему заново создать. Что конкретно хочешь отключить, может быть там можно как-то попроще сделать?
Чтобы для этого игрока не запускался ии
30
native PauseCompAI takes player p, boolean pause returns nothing
Так можно его вручную отключить.
26
pavloradko20, вот что скрывается за действием раздачи ИИ игрокам в инициализации:
function MeleeStartingAI takes nothing returns nothing
    local integer index
    local player  indexPlayer
    local race    indexRace

    set index = 0
    loop
        set indexPlayer = Player(index)
        if (GetPlayerSlotState(indexPlayer) == PLAYER_SLOT_STATE_PLAYING) then
            set indexRace = GetPlayerRace(indexPlayer)
            if (GetPlayerController(indexPlayer) == MAP_CONTROL_COMPUTER) then
                // Run a race-specific melee AI script.
                if (indexRace == RACE_HUMAN) then
                    call PickMeleeAI(indexPlayer, "human.ai", null, null)
                elseif (indexRace == RACE_ORC) then
                    call PickMeleeAI(indexPlayer, "orc.ai", null, null)
                elseif (indexRace == RACE_UNDEAD) then
                    call PickMeleeAI(indexPlayer, "undead.ai", null, null)
                    call RecycleGuardPosition(bj_ghoul[index])
                elseif (indexRace == RACE_NIGHTELF) then
                    call PickMeleeAI(indexPlayer, "elf.ai", null, null)
                else
                    // Unrecognized race.
                endif
                call ShareEverythingWithTeamAI(indexPlayer)
            endif
        endif

        set index = index + 1
        exitwhen index == bj_MAX_PLAYERS
    endloop
endfunction
Это установка ИИ каждому играющему компьютерному игроку в соответствии с расой. По идее тебе надо будет каждому игроку вручную установить ИИ, а нужному игроку не устанавливать.
НО!
Попробуй просто указать этому игроку пустой файл ИИ (map.ai) - в категории ИИ первый пункт. По идее он может перебить нормальный ИИ, таким образом его не будет.

Проверил и указание пустого файла, и нативку на паузу ИИ - ничего не сработало, компьютер чётко следует указаниям ИИ.
Может пользуюсь не так? Вот как прописал в CS для карты на троих игроков:
call PauseCompAI(Player(2), true)
Типа за красного наблюдаю, синий действует по стандарту, а третий игрок с запаузенным ИИ.

Чего-то вообще не работают триггеры, какие бы изменения не вносил. Поэтому указанное выше прошу считать результатом другой проблемы.

Сейчас ещё раз затестил, нативка NazarPunk'а работает.
6
NazarPunk:
native PauseCompAI takes player p, boolean pause returns nothing
Так можно его вручную отключить.
Я использую только обычные триггеры, а такое не умею(
26
pavloradko20, одно из первых в списке есть действие custom script, там нужно ввести эту строку:
call PauseCompAI(Player(0), true)
где вместо ноля в скобках указываешь цифру на единичку меньше номера игрока, например, Player(0)-красный, Player(1)-синий.
30
указываешь цифру на единичку меньше номера игрока
Загруженные файлы
6
8gabriel8:
pavloradko20, одно из первых в списке есть действие custom script, там нужно ввести эту строку:
call PauseCompAI(Player(0), true)
где вместо ноля в скобках указываешь цифру на единичку меньше номера игрока, например, Player(0)-красный, Player(1)-синий.
Со строительством это работает, но с юнитама к сожалению нет. Я создаю юнитов и по триггеру они должны патрулировать область, но вместо этого они идут к исходной позиции. Если знаете, то подскажите как это исправить
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.