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

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

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

ответ
Эти названия задаются в файле 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).

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