Где найти стандартные ИИ для варика? Мне нужно поместить 4 ИИ для четырёх рас (люди, орки, эльфы и нежить), в определённый момент я выдаю компам стартовые войска случайных рас, и нужно запускать ИИ той расы, которую выдал. Меня устраивает стандартный ИИ, но не знаю откуда взять эти файлы. Спасибо за помощь!

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

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
`
ОЖИДАНИЕ РЕКЛАМЫ...
2
28
5 лет назад
2
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
Принятый ответ
0
13
5 лет назад
0
Вставил несколько действий из твоего скрипта. Для теста добавил синему игроку стартовых юнитов альянса и попытался запустить ИИ альянса. Не получилось - просто работники собирают золото и ничего не делают
Вопрос закрыт, спасибо большое -)) после этого его нужно было запустить.
Загруженные файлы
0
28
5 лет назад
Отредактирован PT153
0
Cancel, это вообще код из blizzard.j, его можно получить, создав новую карту и сконвертировав её в JASS.
PickMeleeAI() так-то стартует ИИ.
раскрыть
function PickMeleeAI takes player num, string s1, string s2, string s3 returns nothing
    local integer pick

    // easy difficulty never uses any custom AI scripts
    // that are designed to be a bit more challenging
    //
    if GetAIDifficulty(num) == AI_DIFFICULTY_NEWBIE then
        call StartMeleeAI(num,s1)
        return
    endif

    if s2 == null then
        set pick = 1
    elseif s3 == null then
        set pick = GetRandomInt(1,2)
    else
        set pick = GetRandomInt(1,3)
    endif

    if pick == 1 then
        call StartMeleeAI(num,s1)
    elseif pick == 2 then
        call StartMeleeAI(num,s2)
    else
        call StartMeleeAI(num,s3)
    endif
endfunction

Cancel, у ошибка, Player(2) - это бирюзовый игрок, а не синий. Синий - это Player(1). Потому и не работало.
0
13
5 лет назад
Отредактирован Cancel
0
PT153:
Cancel, это вообще код из blizzard.j, его можно получить, создав новую карту и сконвертировав её в JASS.
PickMeleeAI() так-то стартует ИИ.
раскрыть
function PickMeleeAI takes player num, string s1, string s2, string s3 returns nothing
    local integer pick

    // easy difficulty never uses any custom AI scripts
    // that are designed to be a bit more challenging
    //
    if GetAIDifficulty(num) == AI_DIFFICULTY_NEWBIE then
        call StartMeleeAI(num,s1)
        return
    endif

    if s2 == null then
        set pick = 1
    elseif s3 == null then
        set pick = GetRandomInt(1,2)
    else
        set pick = GetRandomInt(1,3)
    endif

    if pick == 1 then
        call StartMeleeAI(num,s1)
    elseif pick == 2 then
        call StartMeleeAI(num,s2)
    else
        call StartMeleeAI(num,s3)
    endif
endfunction

Cancel, у ошибка, Player(2) - это бирюзовый игрок, а не синий. Синий - это Player(1). Потому и не работало.
У меня работает Player(2) и идёт обращение к синему игроку, работает только после команды старта ИИ, насколько я понял - сначала ИИ выбирается, а уже потом стартуется. Даже если настройками карты синий игрок - орк, то можно выбрать ему ии человека, дать воинов людей и запустить ии человека. Без последнего действия с запуском - не работает. С запуском - работает.
В любом случае спасибо за помощь. Я бы без тебя не смог справиться с этой задачей -)
0
28
5 лет назад
Отредактирован PT153
0
Cancel, Player(2) - это бирюзовый игрок, потому что в JASS индексы игроков с 0, 0 - красный, 1 - синий и так далее.
В настройках игрока дай имя синему, а после старта игры выведи имя Player(2) через CustomScript.
call DisplayTimedTextToPlayer(GetLocalPlayer(), 0., 0., 10., GetPlayerName(Player(2)))
Исправь на Player(1) и убери повторный запуск ИИ, ибо PickMeleeAI() и так стартует ИИ.

Отпишись о результате и выбери лучший ответ.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.