2. Сбор ресурсов
Каждый знает, что сбор ресурсов является важной аспектом во время игры в
Warcraft. Так почему бы не посмотреть на то, как должен быть сделан AI-скрипт
для сбора:
function main takes nothing returns nothing
call Sleep( 1.0 )
call DisplayTextToPlayer( GetLocalPlayer(), 0.0, 0.0, "Script started" )
loop
call ClearHarvestAI()
call HarvestGold( 0, 4 )
call HarvestWood( 0, 1 )
call DisplayTextToPlayer( GetLocalPlayer(), 0.0, 0.0, "Harvesting" )
call Sleep( 1.0 )
endloop
call DisplayTextToPlayer( GetLocalPlayer(), 0.0, 0.0, "Script exiting" )
endfunction
Опробуйте этот скрипт тем же способом, с каким опробовали вышеуказанный
"Hello World!”. Вместо удаления более раннего импортированного файла, и
дальнейшего добавления новой версии, Вы можете щёлкнуть правой кнопкой мыши (в
менеджере импорта) на добавленный до этого файл и выбрать замену.
Не забывайте всегда устанавливать полную видимость в дополнительных
настройках игры, иначе вам будет нелегко увидеть, что делает AI-игрок. { Хотя
можно воспользоваться чит-кодом "iseedeadpeople”}
Почему мы восстанавливаем и переназначаем менеджеру сбора время? Что
случится, если рабочий, рубящий дерево, умрёт? Если мы не восстановим то, что
было мделано менеджером сбора, работник больше никогда не сможет быть
заменён.
.
3. Подготовка большего количества рабочих
Если у нас есть только 5 работников, то их недостаточно, чтобы создать
армию, поэтому давайте создадим гораздо больше рабочих.
function main takes nothing returns nothing
call Sleep( 1.0 )
call DisplayTextToPlayer( GetLocalPlayer(), 0.0, 0.0, "Script started" )
loop
call ClearHarvestAI()
call HarvestGold( 0, 4 )
call HarvestWood( 0, GetUnitCountDone('hpea')-4 )
call DisplayTextToPlayer( GetLocalPlayer(), 0.0, 0.0, "Harvesting" )
call SetProduce(1, 'hpea', 0)
call Sleep( 3.0 )
endloop
call DisplayTextToPlayer( GetLocalPlayer(), 0.0, 0.0, "Script exiting" )
endfunction
GetUnitCountDone('hpea') считает, как много людских крестьян, которых
контролирует игрок. Это используется для того, чтобы высчитать, как много
крестьян, которые не собирают золото и послать их рубить дерево. Почему бы вам
не понаблюдать за компьютером, строящим тысячи рабочих?
Другой способ, чтобы начать карту, полезную для наблюдения за игроками AI,
которых мы разрабатываем, - это создать игру LAN, {то же, что и игра по
локальной сети, только без дополнительных игроков.}. Если Вы установите
дополнительные опции, чтобы позволить полное наблюдение и сделать наблюдателем
самого себя, тогда Вы сможете изучать, как много ресурсов имеет AI-игрок при
выборе тех или иных юнитов или зданий.
Вы попытались? Построил ли он тысячи юнитов? Нет? Ему нужно больше пищи? Мы
скоро сделаем это, построив несколько ферм…
4. Строительство ферм для поддержки большего количества рабочих
Давайте построим несколько ферм, из-за чего мы сможем подготовить большее
количество рабочих и получить больше золота. Если мы производим менее чем 3
дополнительных единицы пищи, тогда мы начинаем строить новую ферму.
function main takes nothing returns nothing
call Sleep( 1.0 )
call DisplayTextToPlayer( GetLocalPlayer(), 0.0, 0.0, "Script started" )
loop
call ClearHarvestAI()
call HarvestGold( 0, 4 )
call HarvestWood( 0, GetUnitCountDone( 'hpea' )-4 )
call DisplayTextToPlayer( GetLocalPlayer(), 0.0, 0.0, "Harvesting" )
call SetProduce( 1, 'hpea', 0 )
if ( 12 + 6 * GetUnitCount('hhou') - GetUnitCount('hpea') < 3 ) then
call DisplayTextToPlayer( GetLocalPlayer(), 0.0, 0.0, "Trying to build a house" )
call SetProduce( 1, 'hhou', 0 )
endif
call Sleep( 3.0 )
endloop
call DisplayTextToPlayer( GetLocalPlayer(), 0.0, 0.0, "Script exiting" )
endfunction
Благодаря этому получим множество рабочих и множество ресурсов, но не
следует ли нам попытаться потратить ресурсы на что-то забавное? Если мы будем
создавать больше строений, возможно, эти здания помогут нам тренировать армию.
Почему бы нет?
5. Создание барака и подготовка нескольких солдат
Настало время, чтобы предпринять наши первые меры к подготовке армии,
которая разрушит всё сопротивление. Давайте начнем с создания барака и
подготовим какого-нибудь пехотинца.
function main takes nothing returns nothing
call Sleep( 1.0 )
call DisplayTextToPlayer( GetLocalPlayer(), 0.0, 0.0,
"Script started" )
loop
call ClearHarvestAI()
call HarvestGold( 0, 4 )
call HarvestWood( 0, GetUnitCountDone( 'hpea' )-4 )
call DisplayTextToPlayer( GetLocalPlayer(), 0.0, 0.0, "Harvesting" )
call SetProduce( 1, 'hpea', 0 )
if ( 12 + 6 * GetUnitCount('hhou') - GetUnitCount('hpea') < 3 ) then
call DisplayTextToPlayer( GetLocalPlayer(), 0.0, 0.0,
"Trying to build a house" )
call SetProduce( 1, 'hhou', 0 )
endif
if ( GetUnitCount( 'hbar' ) < 1 )
then
call DisplayTextToPlayer( GetLocalPlayer(), 0.0, 0.0,
"Trying to build a barrack" )
call SetProduce( 1, 'hbar', 0 )
else
call DisplayTextToPlayer( GetLocalPlayer(), 0.0, 0.0,
"Trying to train a footman" )
call SetProduce( 1, 'hfoo', 0 )
endif
call Sleep( 3.0 )
endloop
call DisplayTextToPlayer( GetLocalPlayer(), 0.0, 0.0,
"Script exiting" )
endfunction
|
Возможно, Вы обратили внимание, что AI через некоторое время одновременно
остановило конструкцию ферм и строительство юнитов. Можете ли Вы вычислить,
почему мы не строим больше ферм, когда мы вот-вот начнём испытывать недостаток
пищи? Может быть мы запутались с тем, как много еды мы используем? Может быть,
Вы могли бы попытаться уладить эту проблему сами, прежде чем я покажу решение
её? (НАМЕК: Есть проблема в одном из условий).
Прежде, чем мы сделаем код
больше, подобно созданию других типов зданий, готовящих другие типы военных
подразделений, может быть мы могли бы даже позволить подразделениям напасть на
что-то? Почему бы нет, но это, вероятно, тяжело и выходит из области этого
основного руководства.
Прежде чем попытаться узнать, если это - трудно, самое
время познать немного больше о Jass. Пора узнать полезность от присутствия
некоторых функций. Это, может быть, даже время, чтобы узнать, где все те
странные функции, которые мы использовали до этого, и как они действительно
работают. Не уходите.