Где найти стандартные ИИ и как запустить
Где найти стандартные ИИ для варика? Мне нужно поместить 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



Просмотров: 114

PT153 #1 - 1 неделю назад 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
Cancel #2 - 1 неделю назад 0
Вставил несколько действий из твоего скрипта. Для теста добавил синему игроку стартовых юнитов альянса и попытался запустить ИИ альянса. Не получилось - просто работники собирают золото и ничего не делают
Вопрос закрыт, спасибо большое -)) после этого его нужно было запустить.
прикреплены файлы
PT153 #3 - 1 неделю назад (отредактировано ) 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). Потому и не работало.
Cancel #4 - 6 дней назад (отредактировано ) 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) и идёт обращение к синему игроку, работает только после команды старта ИИ, насколько я понял - сначала ИИ выбирается, а уже потом стартуется. Даже если настройками карты синий игрок - орк, то можно выбрать ему ии человека, дать воинов людей и запустить ии человека. Без последнего действия с запуском - не работает. С запуском - работает.
В любом случае спасибо за помощь. Я бы без тебя не смог справиться с этой задачей -)
PT153 #5 - 6 дней назад (отредактировано ) 0
Cancel, Player(2) - это бирюзовый игрок, потому что в JASS индексы игроков с 0, 0 - красный, 1 - синий и так далее.
В настройках игрока дай имя синему, а после старта игры выведи имя Player(2) через CustomScript.
call DisplayTimedTextToPlayer(GetLocalPlayer(), 0., 0., 10., GetPlayerName(Player(2)))
Исправь на Player(1) и убери повторный запуск ИИ, ибо PickMeleeAI() и так стартует ИИ.

Отпишись о результате и выбери лучший ответ.